Mobile computing devices such as smartphones and tablet computers are becoming more widely used every day. Android is an open-source, Linux based operating system for such mobile devices that is gaining an increasingly prevalent market share. A large community of developers write applications (“apps”) that run on Android devices. Many of these apps are available either for purchase or for free through the online Android Market, which is run by Google. Android apps can also be downloaded from other online stores and additional third-party sites.
An Android app is distributed in the form of an APK (Android Application Package) file. An APK file is formatted in the ZIP file format. ZIP is a file format used for data compression, archiving and distribution. Multiple folders and files can be “zipped” into and thus stored in a single ZIP file. The ZIP file can be used to distribute the stored content to target computers, on which it can be “unzipped” to recreate the zipped folder structure and install the zipped files. In the case of an APK file, all of the components and support files for an app are zipped into the APK file, which is downloaded to a target device as part of the installation process. The APK file is then unzipped on the target device, thereby installing the app. Although standard ZIP files end with the extension “.zip”, APK files end with the extension “.apk”.
For published software products, including Android apps, it is desirable to be able to create and distribute customized versions of the product for different enterprises, organizations or other customers. To streamline product distribution and licensing, it is important to have a data driven solution where a generic product can be customized after it was built, without having to rebuild the product. In other words, it is desirable to be able to customize a generic version of a product by including custom data with the distribution, rather than rebuilding and separately distributing the product for each target that is provided with a customized version. However, conventionally, injecting custom data in a generic APK file requires resigning the app binary, as well as unzipping and re-zipping the APK file. This approach is burdensome at best, and can be outright unfeasible, as it places a high computational demand on the server from which the APK file is being downloaded. More specifically, in order to conventionally inject custom data into an APK file, instead of simply transmitting the APK file to the target, the server must unzip the APK file, inject the custom data, resign the app, re-zip the modified, resigned content, and then transmit the updated APK file to the target. This requires significant additional CPU cycles as well as disk I/O on the server. Even if these computational resources are available, at best this process adds a great deal of overhead and slows down the distribution process.
It would be desirable to address these issues.